
public class XYToLatLngConverter {

	/* These are complete hacks at converting meters to lat/lng. */
	private static double totalLatDelta = 0.008;
	private static double totalLngDelta = 0.008;
	private static double totalMeterDelta = 800; // meters
	private static double latPerMeter = totalLatDelta/totalMeterDelta;
	private static double lngPerMeter = totalLngDelta/totalMeterDelta;
	
	private final LatLng startCoords;
	
	public XYToLatLngConverter(double startLat, double startLng) {
		startCoords = new LatLng(startLat, startLng);
	}
	
	public LatLng xyToLatLng(double x, double y) {
		return distanceFromLatLng(startCoords, y, x);
	}
	
	 private float distBetweenLatLngs(float lat1, float lng1, float lat2, float lng2) {
		    double earthRadius = 3958.75 * 1609.344;
		    double dLat = Math.toRadians(lat2-lat1);
		    double dLng = Math.toRadians(lng2-lng1);
		    double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
		               Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
		               Math.sin(dLng/2) * Math.sin(dLng/2);
		    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
		    double dist = earthRadius * c;

		    return new Float(dist).floatValue();
    }
	 
	private LatLng distanceFromLatLng(LatLng latlng, double deltaLatMeters, double deltaLngMeters) {
		return new LatLng(latlng.getLat()+latPerMeter*deltaLatMeters,
				latlng.getLng()+lngPerMeter*deltaLngMeters);
	}
}
